<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>05-函数柯里化</title>
</head>

<body>
    <script>
        //currying 又称部分求值 一个currying的函数不会立即求值,而是返回另一个函数,把传入的参数包含在闭包当中.
        // 待真正需要求值的时候,再求值

        // 利于计算月开销

        var cost = (function () {
            let args = []
            return function () {
                if (arguments.length === 0) {
                    //表示开始计算 ,遍历所有参数
                    let money = 0
                    for (let i = 0; i < args.length; i++) {
                        money += args[i]
                    }
                    return money
                } else {
                    //否则存入
                    Array.prototype.push.apply(args, arguments)
                }
            }
        })()
        // cost 传参时,不计算,没参数时,计算
        cost(100)
        cost(200)
        cost(300)
        console.log(cost());
    </script>
</body>

</html>